package com.hzit.entity;

import lombok.Data;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 类名：
 * 作者：WF
 * 功能：购物车类
 */
@Data
public class Cart {

	//1. 定义存放购物项的集合
	private Map<Integer,CartItem> map = new HashMap<>();

	//2. 添加商品到购物车中
	public void addCart(Product product) {
		//2.1 判断购物项集合中是否存在此商品
		//2.1.1 如果不存在就直接添加
		if (!map.containsKey(product.getPid())) {
			//2.1.2 构造购物项
			CartItem item = new CartItem(product.getPid(),product.getPname(),product.getPrice(),1);
			//2.1.3 添加商品到购物项中
			map.put(product.getPid(),item);
		}else{  //2.1.2 如果存在就修改数量及小计
			CartItem item = map.get(product.getPid());
			item.setNum(item.getNum() + 1);
		}
		//2.2 修改库存
		product.setQuantity(product.getQuantity() - 1);
	}

	//3. 从购物车中删除商品
	public void removeCart(Product product) {
		//3.1 恢复库存
		//3.1.1 在购物车集合查询出此商品的购买数量
		CartItem item = map.get(product.getPid());      // 获取购物项
		Integer num = item.getNum();                    // 获取购物项的购买数量
		//3.1.2 恢复库存
		product.setQuantity(product.getQuantity() + num);

		//3.2 从购物车集合中移除此商品
		map.remove(product.getPid());
	}

	//4. 清空购物车
	public void clear(List<Product> productList) {
		//第一步：恢复库存
		//4.1 遍历所有商品的集合
		for (Product product : productList) {
			//4.2 如果在购物车中有此商品才考虑恢复库存
			if (map.containsKey(product.getPid())) {
				//4.3 得到购物项
				CartItem item = map.get(product.getPid());
				//4.4 得到购物项的购买数量
				Integer num = item.getNum();
				//4.5 恢复库存
				product.setQuantity(product.getQuantity() + num);
			}
		}
		//第二步：清空购物车
		map.clear();
	}
}
